package com.xtm.exercise.base.A08map.map01;

import org.junit.Test;

import java.util.HashMap;
import java.util.Map;

/***
 *@Author: 王磊
 *@CreateTime: 2023-08-29  13:35
 *@Description: TODO
 *@title: Demo04Stream
 */
public class Demo04Stream {

    /**
     * 推荐
     * foreach的语法只是对iterator进行了简单的包装，使用起来更加方便而已，但是如果在foreach循环体内，对集合元素进行删除添加操作的时候，
     * 会报出ConcurrentModificationException，并报修改异常。
     * 如果需要在遍历集合的时候对象集合中元素进行删除操作，需要使用iterator的遍历方式，iterator自带的remove删除方式不会报出异常
     **/
    @Test
    public void foreachLamada(){
        Map<String,Integer> map = new HashMap<>();
        map.put("赵丽颖",168);
        map.put("杨颖",165);
        map.put("林志玲",178);

        map.forEach((key,value) -> {
            System.out.println(key + " : " + value);
        });

        System.out.println("------------------------------------");

        map.entrySet().stream().forEach((Map.Entry<String,Integer> entry) -> {
            System.out.println(entry.getKey() + " : " + entry.getValue());
        });
    }

    /*
    练习:
        计算一个字符串中每个字符出现次数

    分析:
        1.使用Scanner获取用户输入的字符串
        2.创建Map集合,key是字符串中的字符,value是字符的个数
        3.遍历字符串,获取每一个字符
        4.使用获取到的字符,去Map集合判断key是否存在
            key存在:
                通过字符(key),获取value(字符个数)
                value++
                put(key,value)把新的value存储到Map集合中
            key不存在:
                put(key,1)
        5.遍历Map集合,输出结果
    */
    @Test
    public void test01(){
        // 创建Map集合,key是字符串中的字符,value是字符的个数
        Map<Character, Integer> map = new HashMap<>();

        String str = "abcadejji";
        // 遍历字符串,获取每一个字符
        char[] charArray = str.toCharArray();
        for (int i = 0; i < charArray.length; i++) {
            char c = charArray[i];
            if(map.containsKey(c)){
                //key存在
                Integer value = map.get(c);
                 value++;
                map.put(c,value);
            } else {
                //key不存在
                map.put(c,1);
            }
        }
        // 遍历Map集合,输出结果
        map.forEach((key,value) -> {
            System.out.println(key + ":" + value);
        });
    }

}
